package com.itheima.dao;

import com.github.pagehelper.Page;
import com.itheima.pojo.Role;

import java.util.Map;
import java.util.Set;

/**
 * 角色持久层接口
 */
public interface RoleDao {

    /**
     * 根据用户id关联查询角色集合
     * @param userId
     * @return
     */
    public Set<Role> findRolesByUserId(Integer userId);

    /**
     * 根据角色名模糊查找角色列表
     * @param queryString
     * @return
     */
    Page<Role> selectByCondition(String queryString);

    /**
     * 添加角色记录，回显id
     * @param role
     * @return
     */
    int add(Role role);

    /**
     * 添加角色菜单中间表记录
     * @param paramMap
     * @return
     */
    int setRoleAndMenu(Map<String, Integer> paramMap);

    /**
     * 添加角色权限中间表记录
     * @param paramMap
     * @return
     */
    int setRoleAndPermission(Map<String, Integer> paramMap);

    /**
     * 根据id查询角色
     * @param roleId
     * @return
     */
    Role findById(Integer roleId);

    /**
     * 根据角色id查询角色菜单中间表记录(二级菜单)
     * @param roleId
     * @return
     */
    Integer[] findMenusByRoleId(Integer roleId);

    /**
     * 根据角色id查询角色权限中间表记录
     * @param roleId
     * @return
     */
    Integer[] findPermissionsByRoleId(Integer roleId);

    /**
     * 修改角色记录
     * @param role
     * @return
     */
    int edit(Role role);

    /**
     * 根据角色id清空角色菜单中间表记录
     * @param roleId
     * @return
     */
    int deleteRoleAndMenu(Integer roleId);

    /**
     * 根据角色id清空角色权限中间表记录
     * @param id
     */
    void deleteRoleAndPermission(Integer id);

    /**
     * 删除角色
     * @param roleId
     */
    void deleteById(Integer roleId);

    /**
     * 根据角色名查角色
     * @param roleName
     * @return
     */
    Role findByName(String roleName);

    /**
     * 根据角色关键字查角色
     * @param roleKeyWord
     * @return
     */
    Role findByKeyWord(String roleKeyWord);
}
